package com.jabm.cmaq.rest.services;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.richfaces.json.JSONArray;
import org.richfaces.json.JSONException;
import org.richfaces.json.JSONObject;

import com.google.gson.Gson;
import com.jabm.cmaq.delegate.interfaces.IDelegateCMaq;
import com.jabm.cmaq.delegate.interfaces.SpringApplicationContext;
import com.jabm.cmaq.modelo.CMaqHerHistorico;
import com.jabm.cmaq.modelo.CMaqHerramientas;
import com.jabm.cmaq.modelo.CMaqMaquinas;
import com.jabm.cmaq.modelo.CMaqUsuarios;

/**
 * Clase encargada de gestionar las peticiones REST
 * para CMaq
 * 
 * @author jabastias
 *
 */
@Path("/cmaqRest")
public class RestServices {

	/**
	 * Delegate
	 */	
	private IDelegateCMaq iDelegateControl;
	
			
	@POST
	@Path("/auth")
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.TEXT_PLAIN)
	public String auth(String json) {
		
		Gson gson = new Gson();
		Usuario usuario = gson.fromJson(json, Usuario.class);
		CMaqUsuarios cmaqUser = new CMaqUsuarios();
		cmaqUser.setEmployeeCode(usuario.getCode());
		cmaqUser.setNameEmployee(usuario.getName());
		
		iDelegateControl = (IDelegateCMaq) SpringApplicationContext.getBean("delegateImpl");

		List<CMaqUsuarios>  listUsu = iDelegateControl.filtrarUsuario(cmaqUser);
		
		if(listUsu != null && listUsu.size() > 0 && listUsu.get(0).getEmployeeCode().equals(usuario.getCode())) {
			return listUsu.get(0).getNameEmployee();
		} else {
			return "";		
		}		
	 
	}

	@POST
	@Path("/searchHerMaq")
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.TEXT_PLAIN)
	public String searchHerMaq(String json) {
		
		Gson gson = new Gson();
		HerMaq herMaq = gson.fromJson(json, HerMaq.class);
		CMaqHerramientas cmaqHerr= new CMaqHerramientas();
		CMaqMaquinas cmaqMaq= new CMaqMaquinas();

		cmaqHerr.setCodigo(herMaq.getCode());
		cmaqMaq.setCodigo(herMaq.getCode());
		
		iDelegateControl = (IDelegateCMaq) SpringApplicationContext.getBean("delegateImpl");

		List<CMaqHerramientas>  listHer= iDelegateControl.filtrarHerramientas(cmaqHerr);
		List<CMaqMaquinas>  listMaq = iDelegateControl.filtrarMaquinas(cmaqMaq);
		HerMaq herramientaMaquina = new HerMaq();
		
		if(listHer != null && listHer.size() > 0 && listHer.get(0).getCodigo().equals(herMaq.getCode())) {
			CMaqHerramientas herramienta = listHer.get(0);
			herramientaMaquina.setCode(herramienta.getCodigo());
			herramientaMaquina.setName(herramienta.getNombre());
			herramientaMaquina.setState(herramienta.getEstado());
		} 
		
		if(listMaq != null && listMaq.size() > 0 && listMaq.get(0).getCodigo().equals(herMaq.getCode())) {
			CMaqMaquinas maquina= listMaq.get(0);
			herramientaMaquina.setCode(maquina.getCodigo());
			herramientaMaquina.setName(maquina.getNombre());
			herramientaMaquina.setState(maquina.getEstado());
		} 
		
	   return gson.toJson(herramientaMaquina);
	}
	
	@POST
	@Path("/closeHerMaq")
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.TEXT_PLAIN)
	public Boolean closeHerMaq(String json) {
		
		Boolean resultado = Boolean.FALSE;
	    iDelegateControl = (IDelegateCMaq) SpringApplicationContext.getBean("delegateImpl");

		if(json != null && !json.equals("")){
		
			try {
				
				JSONObject obj = new JSONObject(json);
				
				String fecha = obj.getString("fecha");
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");		
				Date fechaModificacion = sdf.parse(fecha);
				
				String codigoUsuario = obj.getString("codusuario");
				
				JSONArray array = obj.getJSONArray("hermaqs");
								
				for(int i = 0 ; i < array.length() ; i++){
				    
					if(array.getJSONObject(i) != null && !"".equals(array.getJSONObject(i).getString("code")) 
							 && array.getJSONObject(i) != null && !"".equals(array.getJSONObject(i).getString("state"))) {
						
						String code = array.getJSONObject(i).getString("code");
					    String status = array.getJSONObject(i).getString("state");					
					    
					    iDelegateControl.updateEstadoHerramientaMaq(code, status, fechaModificacion, codigoUsuario);
					    
					    resultado = Boolean.TRUE;
					}
				}
								
				return resultado;
				
			} catch (JSONException | ParseException e) {
				 
				return false;
			}
		
		}else{
			return false;
		}
	
	}
	
}
